package com.ydlclass;

import com.ydlclass.core.HeartbeatDetector;
import com.ydlclass.enumeration.SerializeTypeEnum;
import com.ydlclass.loadbalancer.LoadBalanceImpl.RoundRobinLoadBalancer;
import lombok.extern.slf4j.Slf4j;

/**
 * 服务调用方Application
 * @Author duWenJian
 * @Date 2024/2/10 15:33
 * @Version 1.0
 */
@Slf4j
public class ConsumerApplication {
    public static void main(String[] args) {
        // 服务 调用方，想尽一切办法获取代理对象,使用ReferenceConfig进行封装
        // 实现代理对象之前，需要去注册中心获取服务提供者地址
        // reference一定用生成代理的模版方法，get()
        ReferenceConfig<HelloYrpc> reference = new ReferenceConfig();
        reference.setInterface(HelloYrpc.class);

        // 代理做了什么
        // 1、连接到注册中心
        // 2、拉取服务列表,可以提供多个接口
        // 3、选择一个服务并建立连接
        // 4、发送请求，携带一些信息(接口名，参数列表，方法的名字)，获得结果
        YrpcBootstrap.getInstance()
                .application("first-yrpc-consumer")
                .registry(new RegistryConfig("zookeeper://127.0.0.1:2181"))
                .serialize("hessian")
                .compress("gzip")
                .LoadBalance(new RoundRobinLoadBalancer())
                .group("master")
                .reference(reference);

        for (int i = 0; i < 10; i++) {
            HelloYrpc helloYrpc = reference.get();
            String sayHi = helloYrpc.sayHi("你好");
            log.info("这次服务端的响应结果:{}",sayHi);
        }

    }
}
